#include <iostream>

using namespace std;

/*
 * 函数模板
 *      建立一个通用函数，其函数返回值类型和形参类型可以不具体指定，用一个虚拟的类型来代表
 *   语法
 *      template<typename T>
 *      函数声明或定义
 *
 *      template 生命创建模板
 *      typename 表明其后面的符号是一种数据类型，可以用class代替
 *      T       通用的数据类型，名称可以替换，通常为大写字母
 *
 *   注意
 *      1、自动类型推导，必须要推导出一直的数据类型T才可以使用
 *      2、模板必须要确定出T的数据类型，才可以使用
 */

template<typename T>
void mySwap(T &a, T &b){
    T temp = a;
    a = b;
    b = temp;
}

void test01(){
    int a = 10;
    int b = 20;
    mySwap(a, b);   // 自动类型推导
    cout << "a=" << a << ",b=" << b << endl;

    float c = 3.2;
    float d = 4.1;
    mySwap<float>(c, d);  // 显示指定类型
    cout << "c=" << c << ",d=" << d << endl;
}

int main() {

    test01();

    return 0;
}
